// C++ Templates 第11章：泛型库

/**
 * @brief 11.1 可调用对象
 */
// C++ 中的可调用对象(Callable Objects) 是指那些可以像函数一样被调用的实体。
// 这是泛型编程中的重要概念，使得我们可以编写接受各种 "可调用"实体的通用代码。

// 可调用对象的类型
// C++中有多种可调用对象：
// 1.函数：普通函数和函数指针
void func(int x) { std::cout << x << std::endl; }

// 2.函数对象：重载了operator()的类的实例
struct Functor
{
    void operator()(int x) const { std::cout << x << std::endl; }
};

// 3.Lambda表达式：匿名函数对象
auto lambda = [](int x)
{ std::cout << x << std::endl; };

// 4.成员函数指针：指向类成员函数的指针
class MyClass
{
public:
    void memberFunc(int x) { std::cout << x << std::endl; }
};
// 使用: (obj.*ptr)(args)

// 5.绑定表达式：std::bind的结果
auto bound = std::bind(func, std::placeholders::_1);